home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
c
/
datelib.exe
/
EDGETCH.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-03-27
|
6KB
|
149 lines
static char editgetch_prog[] = "@(#)int editgetch(int form)";
static char editgetch_ver[] = "@(#)v1.50/kr ; 08.06.91";
/* editgetch Edit_GetCHaracter - Tastendruck auswerten, bis auf Cursor
** links und rechts alle F-Tasten ignorieren.
**
** Deklaration int editgetch(int form);
**
** Version 1.50(DOS+MKS)
** Erstellt 08.06.91
** Autor Klaus Rath
**
** Beschreibung 'editgetch' holt einen Tastendruck vom Benutzer ab.
** Wenn es eine normale Taste war, wird der ASCII-Wert
** der Taste zurückgegeben, ansonsten passiert werden nur die
** Tasten KEY_RIGHT und KEY_LEFT akzeptiert.
** ( Zum "Abholen" wird die Funktion getch() von Borland C++ ver-
** wendet, nicht die gleichnamige Funktion von CURSES !!! )
** Die Cursortasten KEY_RIGHT bzw. KEY_LEFT erzeugen BLANK (32)
** bzw. BACKSPACE (8).
** Die Funktion erwartet einen INT als Angabe, welche Werte
** erlaubt sind. Mögliche Angaben ( s. util.h ):
** ALL (1) - alle Werte erlaubt
** UPPER (2) - Buchstaben nur gross
** LOWER (3) - Buchstaben nur klein
** NUM (4) - Nur Zahlen, Punkt, Komma und Vorzeichen
** DATUM (5) - Nur Zahlen, Punkt, Schrägstrich
** ZEIT (6) - Nur Zahlen, Doppelpunkt, Punkt
** Im Fehlerfall wird jeweils NULL zurückgeliefert.
** Mögliche andere Sondertasten werden in dieser Version nicht
** ausgewertet und geben den Wert -1 zurück.
** Änderungen 1.00 ; 08.06.91
** - erste Version int editgetch(void)
** 1.50 ; 08.06.91
** - Übergabeparameter 'int form' zur Prüfung auf bestimmte
** Vorgaben, z.B. nur Großbuchstaben .....
*/
/* Notwendige Einbindungen :
*/
#include <stdio.h>
#ifdef __TURBOC__
#include <conio.h>
#endif
#include <ctype.h>
#include "util.h" /* wg. KEY_... */
#ifdef __TURBOC__
int editgetch(int form)
#else
int editgetch(form)
int form;
#endif
{
int ch;
/* Erstmal ein Zeichen holen; falls es keine Funktionstaste war
** wird der ASCII-Wert nach Vorgabe überprüft und evtl. zurückgegeben :
*/
if ( ( ch = getch() ) > 0 ) {
switch ( form ) {
case ALL : return(ch);
case UPPER : if ( ch > 96 && ch < 123 )
return(toupper(ch));
else {
switch ( ch ) {
case 132: return(142); /* ä */
case 148: return(153); /* ö */
case 129: return(154); /* ü */
default : return(ch);
} /* ENDE: switch(ch) */
} /* ENDE: if(ch) */
case LOWER : if ( ch > 64 && ch < 91 )
return(tolower(ch));
else {
switch ( ch ) {
case 142: return(132); /* Ä */
case 153: return(148); /* Ö */
case 154: return(129); /* Ü */
default : return(ch);
} /* ENDE: switch(ch) */
} /* ENDE: if(ch) */
case NUM : if ( ch > 47 && ch < 58 )
return(ch);
else {
switch ( ch ) {
case 8 : /* BACKSPACE */
case 10 : /* LF */
case 13 : /* CR */
case 27 : /* ESCAPE */
case 43 : /* + */
case 44 : /* , */
case 45 : /* - */
case 46 : return(ch); /* . */
default : return(0);
} /* ENDE: switch(ch) */
} /* ENDE: if(ch) */
case DATUM : if ( ch > 47 && ch < 58 )
return(ch);
else {
switch ( ch ) {
case 8 : /* BACKSPACE */
case 10 : /* LF */
case 13 : /* CR */
case 27 : /* ESCAPE */
case 45 : /* - */
case 47 : /* / */
case 46 : return(ch); /* . */
default : return(NULL);
} /* ENDE: switch(ch) */
} /* ENDE: if(ch) */
case ZEIT : if ( ch > 47 && ch < 58 )
return(ch);
else {
switch ( ch ) {
case 8 : /* BACKSPACE */
case 10 : /* LF */
case 13 : /* CR */
case 27 : /* ESCAPE */
case 58 : /* : */
case 46 : return(ch); /* . */
default : return(NULL);
} /* ENDE: switch(ch) */
} /* ENDE: if(ch) */
default : return(NULL);
} /* ENDE: switch(form) */
} /* ENDE: if(ch) */
else {
/* Ansonsten muß ein zweites Zeichen eingelesen werden:
*/
ch = getch();
switch ( ch ) {
case KEY_IC:
case KEY_DC:
case KEY_HOME:
case KEY_END:
case KEY_PGUP:
case KEY_PGDN:
case KEY_UP:
case KEY_DOWN: return( -1 );
case KEY_LEFT: return( 8 );
case KEY_RIGHT: return( 32 );
default: return( -1 );
} /* ENDE:switch(ch) */
} /* ENDE:if-else(ch=getch) */
} /* ENDE:editgetch() */